perm filename HHT3.FAI[CMS,LCS] blob
sn#380241 filedate 1978-09-13 generic text, type T, neo UTF8
00100 ; LOAD THIS FILE AND SAVE AS "HHT.DMP"
00200 ; THEN EX CON11.FAI[CMS,LCS] TO CONVERT TO PDP-11 LOADER FORMAT
00300 ; FINAL FILE IS "LOAD11.HHT"
00400
00500 ; BIT RATE GEN CODES
00600 ; 0 = 0 10 = 9600
00700 ; 1 = 19.2K 11 = 4800
00800 ; 2 = 50 12 = 1800
00900 ; 3 = 75 13 = 1200
01000 ; 4 = 134.5 14 = 2400
01100 ; 5 = 200 15 = 300
01200 ; 6 = 600 16 = 150
01300 ; 7 = 2400 17 = 110
01400
01500 TITLE HHT
01600 .INSERT ASMBL.FAI[CMS,LCS]
01700
01800 CPL ← = 28 ;CHRS PER LINE
01900 NCHRS ← = 112 ;CHRS PER SCREEN
02000
02100 ; Zpage ram
02150 LOC 0
02200 COL: 0
02300 CUR: 0
02400 0
02500 WINDOW: 0
02600 0
02700
02800 TMP: 0
02900 0
03000 LINL: 0
03100 CHRL: 0
03200 BRT: 0
03300
03400 NWAIT: 0
03500 UPFLG: 0
03600 CURVIS: 0
03700 DIS: 0
03800 0
03900 SHIFT: 0
04000 WINK: 0
04100
04400 LOC 600
04500 REBUF0: BLOCK = 128 ;REFRESH BUFFER
04600 ; LOC 1000
04700 REBUF1: BLOCK = 128
04800 ; LOC 1200
04900 REBUF2: BLOCK = 128
05000 ; LOC 1400
05100 REBUF3: BLOCK = 128
05200 ; LOC 1600
05300 REBUF4: BLOCK = 128
05400 BLOCK = 1024
05500
05600 LOC 4000
05700 ABUF: 0 ;ASCII CHR BUF
00100 ; Reset
00200 LOC 174000 ;LOC 174000
00300 RSTA: LDAI 377 ;TURN OFF COLS
00400 STA COLREG
00500 CLD ;CLEAR DECIMAL MODE
00600 LDXI 177 ;STACK DEPTH
00700 TXS ;SETUP STACK
00800 LDAI 0 ;SET UP BRIGHTNESS
00900 STAZ BRT
01000
01100 ; SETUP AND CLEAR SCREEN
01200 ;CLEAR ABUF, SETUP CURSOR AND WINDOW
01300 SD ← 10 ;START OF ABUF
01400 ED ← 14 ;END OF ABUF
01500 JSR HOME ;SETUP CURSOR
01600 LDAI =16 ;NUMBER OF LINES IN MEM
01700 STAZ TMP
01800 CLRM: JSR LF ;<lf> THEN CLEAR LINE *16
01900 DECZ TMP
02000 BNE CLRM
02100 ; INIT I/O
02200 ;INIT RS232
02300 SIODEF ← 225 ;UART CONTROL WORD
02400 ACIAC ← 77776 ;UART CONTROL REG ADDRESS
02500 ACIAD ← 77777 ;UART DATA REG ADDRESS
02600 LDAI 3 ;RESET ACIA
02700 STA ACIAC
02800 LDAI SIODEF ;SETUP DEFAULT I/O CONTROL
02900 STA ACIAC
03000 ;INIT KB SCANER
03100 KBD ← 23776 ;KEYBOARD DATA REGISTER ADDRESS
03200 KBC ← 23777 ;KEYBOARD CONTROL REGISTER ADDRESS
03300 LDAI 2 ;KB DPY MODE SET
03400 STA KBC
03500 LDAI 60 ;KB CLK DIV
03600 STA KBC
03700
03800 LDAI 302 ;CLEAR KB INTERUPT
03900 STA KBC
04000
04100 LDAI 100 ;READ KB
04200 STA KBC
04300
04400 CLI ;ENABLE INTERUPTS
00100 ; REFRESH LOOP
00200 NCHRS ← =112 ;NUMBER OF CHRS ON SCREEN
00300 DPYSR ← 27777 ;DISPLAY SHIFT REGISTER ADDRESS
00400
00500 LDXI NCHRS-1
00600 RELOOP: LDAI 376
00700 STAZ COL ;SETUP COL BIT 1
00800 ; CY
00900 SLOOP0: LDAX REBUF0 ;PUT FIRST COL IN SHIFT 4
01000 STA DPYSR ;REGISTER STARTING WITH LAST CHR 4
01100 DEX ; 2
01200 BPL SLOOP0 ; _3_
01300 JSR NXCOL ;TURN ON COL AND WAIT 5+(13*112)=1461
01400
01500 SLOOP1: LDAX REBUF1 ;SECOND
01600 STA DPYSR
01700 DEX
01800 BPL SLOOP1
01900 JSR NXCOL
02000
02100 SLOOP2: LDAX REBUF2 ;THIRD
02200 STA DPYSR
02300 DEX
02400 BPL SLOOP2
02500 JSR NXCOL
02600
02700 SLOOP3: LDAX REBUF3 ;FORTH
02800 STA DPYSR
02900 DEX
03000 BPL SLOOP3
03100 JSR NXCOL
03200
03300 SLOOP4: LDAX REBUF4 ;FIFTH
03400 STA DPYSR
03500 DEX
03600 BPL SLOOP4
03700 JSR NXCOL
03800
03900 JMP RELOOP
00100 ; WAIT LOOP AND SETUP
00200 COLREG ← 33777 ;COL ENABLE REGISTER ADDRESS
00300 CPL ← = 28 ;NUMBER OF CHRS PER LINE
00400 SPEED ← = 36 ;SPEED OF SHIFT RIGHT IN ms * 2
00500 ; TURN ON COL CY
00600 NXCOL: LDAZ COL ; 3
00700 STA COLREG ;TURN ON COL 4
00800 SEC ; 2
00900 ROLZ COL ;SHIFT FOR NEXT COL 5
01000
01100 ; WAIT(BRIGHTNESS) Tcy = 1488 = .9916 ms
01200 LDXZ BRT ; 3
01300 LDAX BTBL ; 4
01400 STAZ NWAIT ; 4
01500 WAIT1: DECZ NWAIT ; 5
01600 BNE WAIT1 ; 3
01700
01800 INCZ WINK ; 5
01900 BEQ BLINK ;TIME TO BLINK 2
02000 GOWAIT: LDAX OFFTBL ; 4
02100 STAZ NWAIT ;SETUP OFF WAIT 4
02200 LDXI NCHRS-1 ; 2
02300 ; TURN OFF COL
02400 LDAI 377 ; 2
02500 STA COLREG ;TURN OFF COL 4
02600 LDAZ UPFLG ;CK IF UPDATE FLAG SET 3
02700 BNE CKSHFT ; 2
02800
02900 ; WAIT(¬BRIGHTNESS)
03000 WAIT2: DECZ NWAIT ; 5
03100 BNE WAIT2 ; 3
03200
03300 RTS ; 6
03400 ; BRIGHTNESS TABLES
03500 BTBL: =80 ↔ =200
03600 OFFTBL: =120 ↔ 1
03700 ; BLINK CURSOR
03800 BLINK: JSR SHOCUR ;XOR CURSOR INTO REBUF
03900 JMP GOWAIT
04000 ; CHECK FOR RIGHT SHIFT
04100 CKSHFT: BPL UPDATE ;CK RIGHT SHIFT FLAG
04200 DECZ SHIFT ;SEE IF TIME TO SHIFT
04300 BNE WAIT2 ;CK UPDATE?
04400 LDAI SPEED
04500 STAZ SHIFT
04600 SEI ;MASK OUT INTERUPTS
04700 LDYZ WINDOW
04800 INY
04900 TYA
05000 ANDI 77
05100 CMPI 45 ;CHECK IF AT LEFT EDGE
05200 BCS EDGE
05300 STYZ WINDOW
05400 JSR CKVIS ;SETUP Y INDEX AND DISTANCE
05500 CLI ;ENABLE INTERUPTS
05600 JMP UPDPY
05700
05800 EDGE: LDAZ UPFLG
05900 ANDI 177 ;TURN OFF RIGHT SHIFT FLAG
06000 STAZ UPFLG
06100 CLI ;ENABLE INTERUPTS
06200 BEQ WAIT2 ;FALL THROUGH TO UPDATE
00100 ; UPDATE SCREEN
00200 UPDATE: LDAI 0 ;RESET UDATE FLAG
00300 STAZ UPFLG
00400 UPDPY: LDAZ WINDOW ;COPY WINDOW INTO TEMP
00500 STAZ TMP
00600 LDAZ WINDOW+1
00700 STAZ TMP+1
00800 LDAI 4 ;NUMBER OF LINES PER SCREEN
00900 STAZ LINL
01000 LDYI 0
01100
01200 LLOOP: LDAI CPL ;28 CHRS TO GO
01300 STAZ CHRL
01400
01500 ULOOP: LDXI 0
01600 LDAIX TMP ;WRITE CHRGEN BITS INTO REBUF
01700 JSR WCHR
01800 INY
01900 INCZ TMP
02000 BNE CKCHRL
02100 INCZ TMP+1
02200 LDAZ TMP+1
02300 CMPI ED
02400 BNE CKCHRL
02500 LDAI SD
02600 STAZ TMP+1
02700
02800 CKCHRL: DECZ CHRL
02900 BNE ULOOP ;MORE CHRS LEFT ON LINE
03000
03100 LDAZ TMP
03200 CLC
03300 ADCI 44 ;100-CPL = NEXT LINE
03400 STAZ TMP
03500 BCC NOOF
03600 INCZ TMP+1
03700 LDAZ TMP+1
03800 CMPI ED
03900 BNE NOOF
04000 LDAI SD
04100 STAZ TMP+1
04200
04300 NOOF: DECZ LINL
04400 BNE LLOOP ;DO NEXT LINE
04500
04600 JSR SHOCUR ;SHOW CURSOR IF ON SCREEN
04700 LDXI NCHRS-1 ;SETUP X
04800 RTS
00100 ; KB INTERUPT ROUTINE
00200 KBINT: PHA ;SAVE REGS
00300 TXA
00400 PHA
00500
00600 LDX KBD ;GET CHR FROM KB
00700
00800 LDAI 302 ;CLEAR KB INTERUPT
00900 STA KBC
01000 CLI ;CLEAR INTERUPT MASK
01100
01200 OWAIT: LDA ACIAC
01300 ANDI 2 ;CHECK IF FULL
01400 BEQ OWAIT
01500 LDAX CHRTBL ;CONVERT KB TO ASCCI
01600 STA ACIAD ;OUTPUT IT
01700
01800 PLA ;RESTORE REGS
01900 TAX
02000 PLA
02100 RTI ;RETURN
02200 ;ERASE CURSOR
02300 CKERA: LDYZ CURVIS
02400 BMI NOS ;CK IF ON SCREEN
02500 LDXI 0
02600 LDAIX CUR
02700 ; GEN CHR
02800 WCHR: TAX ;X ← ASCII CHR
02900 LDAX CGEN0 ;FILL REBUF COLS 0-4
03000 STAY REBUF0
03100 LDAX CGEN1
03200 STAY REBUF1
03300 LDAX CGEN2
03400 STAY REBUF2
03500 LDAX CGEN3
03600 STAY REBUF3
03700 LDAX CGEN4
03800 STAY REBUF4
03900 NOS: RTS
04000 ; <bspace>
04100 BS: JSR CKERA ;ERASE OLD CURSOR IF ON SCREEN
04200 LDAZ CUR ;DECERMENT CURSOR
04300 BNE NOBACK
04400 DECZ CUR+1
04500 LDAZ CUR+1
04600 CMPI SD-1 ;CK IF BEFORE BEGINING
04700 BNE NOBACK
04800 LDAI ED-1 ;WRAP AROUND
04900 STAZ CUR+1
05000 NOBACK: DECZ CUR
05100 JMP CKCUR ;SHOW CURSOR IF ON SCREEN
05200 ; CURSOR OFF LINE
05300 OFFLIN: DECZ CUR ;FIX CUR FOR <cr>
05400 JSR CR ;<cr>
05500 JMP RLF ;<lf>, CK SCROLL AND UPDATE
00100 ; RS232 INTERUPT ROUTINE
00200 RSINT: PHA ;SAVE REGS
00300 TXA
00400 PHA
00500 TYA
00600 PHA
00700
00800 LDA ACIAD ;GET CHR FROM ACIA
00900 ANDI 177 ;7 BITS
01000
01100 CMPI 30 ;CONTROL CODES
01200 BCC SCNTRL
01300 CMPI 177 ;<bspace>
01400 BEQ BS
01500
01600 PCHR: LDXI 0
01700 STAIX CUR ;STORE IN ABUF
01800 LDYZ CURVIS ;CK IF IN WINDOW
01900 BMI INCUR
02000 JSR WCHR ;WRITE CHR IN REBUF
02100
02200 INCUR: INCZ CUR ;INCREMENT CURSOR
02300 LDAZ CUR
02400 ANDI 77
02500 BEQ OFFLIN ;BRANCH IF OFF END OF LINE
02600
02700 CKCUR: JSR CKVIS ;SHOW CURSOR IF ON SCREEN
02800
02900 JSR SHOCUR ;XOR CURSOR INTO REBUF
03000
03100 RSRTRN: PLA ;RESTORE REGS
03200 TAY
03300 PLA
03400 TAX
03500 PLA
03600 RTI ;RETURN
00100 ; FOLLOW CURSOR
00200 FOLLOW: LDXZ WINDOW
00300 LDYZ WINDOW+1
00400 LDAZ CUR
00500 ANDI 300 ;SET CURSOR AT BOTTOM RIGHT OF WINDOW
00600 SEC
00700 SBCI 300
00800 STAZ WINDOW
00900 LDAZ CUR+1
01000 SBCI 0
01100 CMPI SD-1
01200 BNE NOTB4
01300 LDAI ED-1
01400 NOTB4: STAZ WINDOW+1
01500
01600 LDAZ CUR ;SET CURSOR AT RIGHT
01700 ANDI 77
01800 CMPI CPL
01900 BCC OK
02000 SBCI CPL-1
02100 ORAZ WINDOW
02200 STAZ WINDOW
02300
02400 OK: CPXZ WINDOW ;UPDATE SCREEN IF DIFFERENT
02500 BNE SETFLG
02600 CPYZ WINDOW+1
02700 BNE SETFLG
02800 BEQ RSRTRN
00100 ; RS232 CONTROL
00200 SCNTRL: CMPI 26 ;CUR ← RIGHT BOTTOM
00300 BEQ FOLLOW
00400 CMPI 12 ;<lf>
00500 BEQ RLF
00600 CMPI 15 ;<cr>
00700 BEQ RCR
00800 CMPI 13 ;SCROLL UP
00900 BEQ SCRLU
01000 CMPI 14 ;SCROLL DOWN
01100 BEQ SCRLD
01200 CMPI 22 ;TOGGLE BRIGHTNESS
01300 BEQ BRIGHT
01400 CMPI 20 ;RIGHT
01500 BEQ RIGHT
01600 CMPI 21 ;SET AT LEFT
01700 BEQ LEFT
01800 CMPI 7 ;ERROR
01900 BEQ JRTRN
02000 CMPI 27 ;HOME
02100 BEQ RHOME
02200 JMP PCHR ;PRINT IT ANYWAY
02300 RHOME: JSR HOME
02400 JRTRN: JMP RSRTRN ;SET UPDATE FLAG
02500 ; <lf>
02600 RLF: JSR LF ;<lf>
02700 JMP SETFLG ;UPDATE SCREEN
02800 ; <cr>
02900 RCR: JSR CKERA ;ERASE OLD CURSOR
03000 JSR CR
03100 JMP CKCUR ;SHOW CURSOR IF ON SCREEN
03200 ; SCROLL DOWN
03300 SCRLD: LDAZ WINDOW
03400 CLC
03500 ADCI 100 ;FOR 64 CHRS
03600 STAZ WINDOW
03700 BCC SETFLG
03800 INCZ WINDOW+1
03900 LDAZ WINDOW+1
04000 CMPI ED
04100 BNE SETFLG
04200 LDAI SD
04300 STAZ WINDOW+1
04400 SETFLG: JSR CKVIS
04500 INCZ UPFLG ;UPDATE SCREEN
04600 JMP RSRTRN
00100 ; SCROLL UP
00200 SCRLU: LDAZ WINDOW
00300 SEC
00400 SBCI 100 ;64 CHRS PER LINE
00500 STAZ WINDOW
00600 BCS SETFLG
00700 DECZ WINDOW+1
00800 LDAZ WINDOW+1
00900 CMPI SD-1
01000 BNE SETFLG
01100 LDAI ED-1
01200 STAZ WINDOW+1
01300 JMP SETFLG
01400 ; BRIGHTNESS
01500 BRIGHT: LDAZ BRT
01600 ANDI 1
01700 EORI 1 ;TOGGLE
01800 STAZ BRT
01900 JMP RSRTRN
02000 ; SET WINDOW AT LEFT OF PAGE
02100 LEFT: LDAZ WINDOW
02200 ANDI 300
02300 STAZ WINDOW
02400 LDAI 1 ;1 FOR NO RIGHT SHIFT AND UPDATE SCREEN
02500 STAZ UPFLG
02600 JMP SETFLG
02700 ; WINDOW RIGHT
02800 RIGHT: LDAZ UPFLG
02900 EORI 200 ;TOGGLE RIGHT SHIFT BIT
03000 STAZ UPFLG
03100 LDAI SPEED
03200 STAZ SHIFT
03300 JMP RSRTRN
00100 ; CK IF IN WINDOW
00200 CKVIS: LDYI 377 ;SET NO SHOW
00300 LDAZ CUR ;GET DISTANCE
00400 SEC
00500 SBCZ WINDOW
00600 STAZ DIS
00700 LDAZ CUR+1
00800 SBCZ WINDOW+1
00900 BCS CKEQ
01000 ADCI 4 ;IF NEG, ADD BUF LEN
01100 CKEQ: STAZ DIS+1
01200 BNE NOTVIS ;NO SHOW IF ≥ 256
01300 LDAZ DIS
01400 ANDI 77
01500 CMPI CPL ;NO SHOW IF ≥ 28
01600 BCS NOTVIS
01700 STAZ CURVIS
01800 LDAZ DIS ;GET REBUF INDEX
01900 ANDI 300
02000 ROLA
02100 ROLA
02200 ROLA
02300 TAX
02400 LDAX ROWTBL ;NLINES * 28
02500 ADCZ CURVIS
02600 TAY
02700 NOTVIS: STYZ CURVIS
02800 RTS
02900
03000 ROWTBL: 0
03100 CPL
03200 CPL*2
03300 CPL*3
03400
03500 SHOCUR: LDYZ CURVIS
03600 BMI NOSHO
03700 LDAY REBUF0 ;OR CURSOR INTO CHR
03800 EORI 100
03900 STAY REBUF0
04000 LDAY REBUF1
04100 EORI 100
04200 STAY REBUF1
04300 LDAY REBUF2
04400 EORI 100
04500 STAY REBUF2
04600 LDAY REBUF3
04700 EORI 100
04800 STAY REBUF3
04900 LDAY REBUF4
05000 EORI 100
05100 STAY REBUF4
05200 NOSHO: RTS
00100 ; HOME CURSOR?
00200 HOME: LDAI 0 ;CURSOR ← WINDOW ← TOP
00300 STAZ CUR
00400 STAZ WINDOW
00500 STAZ CURVIS
00600 LDAI SD
00700 STAZ CUR+1
00800 STAZ WINDOW+1
00900 STAZ UPFLG ;SET UPDATE FLAG
01000 RTS
01100 ; <lf> SUBROUTINE
01200 LF: LDAZ CUR
01300 CLC
01400 ADCI 100 ;CUR ← CUR + 64
01500 STAZ CUR
01600 BCC CTEOL
01700 INCZ CUR+1
01800 LDAZ CUR+1
01900 CMPI ED
02000 BNE CTEOL
02100 LDAI SD ;WRAP AROUND
02200 STAZ CUR+1
02300 ; CLEAR TO END OF LINE.
02400 CTEOL: LDAZ CUR
02500 ANDI 77
02600 EORI 77
02700 TAY ;Y ← # CHRS LEFT ON LINE
02800 LDAI 40 ;<space>
02900 CLRL: STAIY CUR ;FILL CURSOR TO CURSOR + CPL
03000 DEY ;WITH SPACES
03100 BPL CLRL
03200 RTS
03300 ; <cr> SUBROUTINE
03400 CR: LDAZ CUR ;CUR ← CUR ∧ ¬77
03500 ANDI 300
03600 STAZ CUR
03700 RTS
00100 ; ASCII TABLE BITS 7 6 5 4 3 2 1 0
00200 ; LOC 176000 CNTL SHFT S2 S1 S0 RL2 RL1 RL0
00300 LOC 176000
00400 CHRTBL:
00500 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ;CONTROL
00600 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00700 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01100 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01200 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01300
01400 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ;CNTL SHFT
01500 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01600 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01700 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
01900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02100 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02200
02300 13 ↔ 14 ↔ "," ↔ "." ↔ "(" ↔ ")" ↔ 7 ↔ 7 ;SHIFT
02400 20 ↔ 21 ↔ "'" ↔ 42 ↔ "[" ↔ "]" ↔ 7 ↔ 7
02500 22 ↔ 23 ↔ ";" ↔ ":" ↔ "/" ↔ "\" ↔ 7 ↔ 7
02600 24 ↔ 25 ↔ "!" ↔ "?" ↔ "*" ↔ "#" ↔ 7 ↔ 7
02700 26 ↔ 27 ↔ "+" ↔ "-" ↔ "%" ↔ "=" ↔ 7 ↔ 7
02800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
02900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03000 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03100
03200 "0" ↔ "5" ↔ "A" ↔ "F" ↔ "K" ↔ "P" ↔ "U" ↔ 7
03300 "1" ↔ "6" ↔ "B" ↔ "G" ↔ "L" ↔ "Q" ↔ "V" ↔ "Z"
03400 "2" ↔ "7" ↔ "C" ↔ "H" ↔ "M" ↔ "R" ↔ "W" ↔ 177
03500 "3" ↔ "8" ↔ "D" ↔ "I" ↔ "N" ↔ "S" ↔ "X" ↔ " "
03600 "4" ↔ "9" ↔ "E" ↔ "J" ↔ "O" ↔ "T" ↔ "Y" ↔ 15
03700 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03800 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
03900 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7 ↔ 7
00100 ;CHR GEN ⊗ = GRAPHICS
00200 ; 0 1 2 3 4 5 6 7
00300 ; 0/ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗
00400 ; 10/ ⊗
00500 ; 20/
00600 ; 30/ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗ ⊗
00700 ; 40/ ! " # $ % & '
00800 ; 50/ ( ) * + , - . /
00900 ; 60/ 0 1 2 3 4 5 6 7
01000 ; 70/ 8 9 : ; < = > ?
01100 ;100/ @ A B C D E F G
01200 ;110/ H I J K L M N O
01300 ;120/ P Q R S T U V W
01400 ;130/ X Y Z [ \ ] ↑ ←
01500 ;140/ a b c d e f g
01600 ;150/ h i j k l m n o
01700 ;160/ p q r s t u v w
01800 ;170/ x y z { | }
01900
02000 LOC 176400 ;LOC 176400
02100
02200 CGEN0: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
02300 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
02400 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02500 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
02600 000 ↔ 157 ↔ 003 ↔ 024 ↔ 056 ↔ 043 ↔ 060 ↔ 003
02700 034 ↔ 101 ↔ 044 ↔ 010 ↔ 100 ↔ 010 ↔ 140 ↔ 040
02800 076 ↔ 102 ↔ 102 ↔ 042 ↔ 010 ↔ 057 ↔ 060 ↔ 101
02900 066 ↔ 106 ↔ 146 ↔ 114 ↔ 010 ↔ 024 ↔ 101 ↔ 002
03000 164 ↔ 176 ↔ 177 ↔ 076 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03100 177 ↔ 101 ↔ 040 ↔ 177 ↔ 177 ↔ 177 ↔ 177 ↔ 076
03200 177 ↔ 076 ↔ 177 ↔ 046 ↔ 001 ↔ 077 ↔ 037 ↔ 177
03300 143 ↔ 003 ↔ 141 ↔ 177 ↔ 002 ↔ 101 ↔ 004 ↔ 010
03400 000 ↔ 044 ↔ 177 ↔ 070 ↔ 060 ↔ 070 ↔ 010 ↔ 046
03500 177 ↔ 172 ↔ 040 ↔ 177 ↔ 101 ↔ 174 ↔ 174 ↔ 070
03600 177 ↔ 006 ↔ 174 ↔ 110 ↔ 004 ↔ 074 ↔ 034 ↔ 074
03700 104 ↔ 047 ↔ 104 ↔ 010 ↔ 177 ↔ 000 ↔ 101 ↔ 000
03800
03900 CGEN1: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000 ↔ 000
04000 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
04100 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
04200 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010 ↔ 010
04300 000 ↔ 157 ↔ 000 ↔ 177 ↔ 111 ↔ 023 ↔ 116 ↔ 000
04400 042 ↔ 042 ↔ 030 ↔ 010 ↔ 040 ↔ 010 ↔ 140 ↔ 020
04500 121 ↔ 177 ↔ 141 ↔ 101 ↔ 014 ↔ 111 ↔ 110 ↔ 041
04600 111 ↔ 051 ↔ 146 ↔ 054 ↔ 024 ↔ 024 ↔ 042 ↔ 001
04700 124 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
04800 010 ↔ 177 ↔ 100 ↔ 010 ↔ 100 ↔ 002 ↔ 004 ↔ 101
04900 011 ↔ 101 ↔ 011 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
05000 024 ↔ 004 ↔ 121 ↔ 101 ↔ 004 ↔ 101 ↔ 002 ↔ 034
05100 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 176 ↔ 111
05200 010 ↔ 000 ↔ 100 ↔ 040 ↔ 177 ↔ 004 ↔ 010 ↔ 104
05300 006 ↔ 011 ↔ 010 ↔ 124 ↔ 004 ↔ 100 ↔ 040 ↔ 100
05400 050 ↔ 110 ↔ 144 ↔ 066 ↔ 000 ↔ 000 ↔ 101 ↔ 000
00100 CGEN2: 000 ↔ 017 ↔ 177 ↔ 170 ↔ 010 ↔ 010 ↔ 010 ↔ 000
00200 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 170
00300 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 052 ↔ 000 ↔ 000
00400 170 ↔ 017 ↔ 017 ↔ 170 ↔ 017 ↔ 177 ↔ 177 ↔ 177
00500 000 ↔ 000 ↔ 003 ↔ 024 ↔ 177 ↔ 010 ↔ 121 ↔ 000
00600 101 ↔ 034 ↔ 030 ↔ 076 ↔ 000 ↔ 010 ↔ 000 ↔ 010
00700 111 ↔ 100 ↔ 121 ↔ 101 ↔ 012 ↔ 111 ↔ 114 ↔ 021
00800 111 ↔ 031 ↔ 000 ↔ 000 ↔ 042 ↔ 024 ↔ 024 ↔ 121
00900 164 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 101
01000 010 ↔ 101 ↔ 100 ↔ 024 ↔ 100 ↔ 004 ↔ 010 ↔ 101
01100 011 ↔ 121 ↔ 031 ↔ 111 ↔ 177 ↔ 100 ↔ 100 ↔ 020
01200 010 ↔ 170 ↔ 111 ↔ 101 ↔ 010 ↔ 177 ↔ 177 ↔ 052
01300 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 111
01400 010 ↔ 000 ↔ 100 ↔ 020 ↔ 100 ↔ 170 ↔ 004 ↔ 104
01500 011 ↔ 011 ↔ 004 ↔ 124 ↔ 077 ↔ 100 ↔ 100 ↔ 074
01600 020 ↔ 110 ↔ 124 ↔ 101 ↔ 000 ↔ 000 ↔ 076 ↔ 000
01700
01800 CGEN3: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
01900 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
02000 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
02100 000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
02200 000 ↔ 000 ↔ 000 ↔ 177 ↔ 111 ↔ 144 ↔ 046 ↔ 000
02300 000 ↔ 000 ↔ 044 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 004
02400 105 ↔ 000 ↔ 111 ↔ 111 ↔ 177 ↔ 111 ↔ 112 ↔ 011
02500 111 ↔ 011 ↔ 000 ↔ 000 ↔ 101 ↔ 024 ↔ 010 ↔ 011
02600 104 ↔ 011 ↔ 111 ↔ 101 ↔ 101 ↔ 111 ↔ 011 ↔ 111
02700 010 ↔ 000 ↔ 100 ↔ 042 ↔ 100 ↔ 002 ↔ 020 ↔ 101
02800 011 ↔ 041 ↔ 051 ↔ 111 ↔ 001 ↔ 100 ↔ 040 ↔ 040
02900 024 ↔ 004 ↔ 105 ↔ 000 ↔ 020 ↔ 000 ↔ 002 ↔ 010
03000 000 ↔ 124 ↔ 110 ↔ 104 ↔ 110 ↔ 124 ↔ 011 ↔ 106
03100 010 ↔ 000 ↔ 075 ↔ 050 ↔ 000 ↔ 004 ↔ 004 ↔ 104
03200 011 ↔ 006 ↔ 004 ↔ 124 ↔ 104 ↔ 100 ↔ 040 ↔ 100
03300 050 ↔ 104 ↔ 114 ↔ 101 ↔ 000 ↔ 000 ↔ 010 ↔ 000
03400
03500 CGEN4: 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 010 ↔ 000
03600 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010
03700 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 000
03800 000 ↔ 010 ↔ 000 ↔ 010 ↔ 010 ↔ 010 ↔ 000 ↔ 010
03900 000 ↔ 000 ↔ 000 ↔ 024 ↔ 062 ↔ 142 ↔ 100 ↔ 000
04000 000 ↔ 000 ↔ 000 ↔ 010 ↔ 000 ↔ 010 ↔ 000 ↔ 002
04100 076 ↔ 000 ↔ 106 ↔ 066 ↔ 010 ↔ 061 ↔ 061 ↔ 007
04200 066 ↔ 006 ↔ 000 ↔ 000 ↔ 000 ↔ 024 ↔ 000 ↔ 006
04300 174 ↔ 176 ↔ 066 ↔ 042 ↔ 076 ↔ 101 ↔ 001 ↔ 072
04400 177 ↔ 000 ↔ 077 ↔ 101 ↔ 100 ↔ 177 ↔ 177 ↔ 076
04500 006 ↔ 136 ↔ 106 ↔ 062 ↔ 001 ↔ 077 ↔ 037 ↔ 177
04600 143 ↔ 003 ↔ 103 ↔ 000 ↔ 040 ↔ 000 ↔ 004 ↔ 010
04700 000 ↔ 170 ↔ 060 ↔ 104 ↔ 177 ↔ 130 ↔ 002 ↔ 077
04800 160 ↔ 000 ↔ 000 ↔ 104 ↔ 000 ↔ 170 ↔ 170 ↔ 070
04900 006 ↔ 177 ↔ 010 ↔ 044 ↔ 104 ↔ 074 ↔ 034 ↔ 074
05000 104 ↔ 077 ↔ 104 ↔ 000 ↔ 000 ↔ 000 ↔ 000 ↔ 000
05100
05200 ; INTER VECTS
05300 LOC 177772 ;LOC 177772
05400 NMIV: KBINT∧377 ;NMIV: ABSO KBINT
05500 371
05600 RSTV: 0 ;RSTV: ABSO RSTA
05700 370
05800 IRQV: RSINT∧377 ;IRQV: ABSO RSINT
05900 371
06000 END